package com.whfc.base.service;

import com.whfc.base.dto.MsgRecordDTO;
import com.whfc.base.dto.MsgStatisticsDTO;
import com.whfc.base.entity.AppMessage;
import com.whfc.base.param.WarnMsgSearchParam;
import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.common.result.PageVO;
import com.whfc.entity.dto.msg.AppMsgNumDTO;
import com.whfc.entity.dto.msg.AppMsgToUserDTO;
import com.whfc.entity.dto.msg.AppWarnMsgDTO;
import com.whfc.fuum.entity.SysUser;

import java.util.Date;
import java.util.List;

/**
 * @Description: 消息服务
 * @author: xugcheng
 * @version: 1.0
 * @date: 2020-11-25 14:18
 */
public interface MessageService {

    /**
     * 首页消息列表
     *
     * @param user
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param state
     * @param moduleType
     * @return
     */
    PageData<AppWarnMsgDTO> list(SysUser user, Integer pageNum, Integer pageSize, Integer deptId, Integer state, Integer moduleType);

    /**
     * 首页消息列表
     *
     * @param userPhone
     * @param pageNum
     * @param pageSize
     * @param deptId
     * @param state
     * @param moduleType
     * @return
     */
    PageData<AppWarnMsgDTO> list(String userPhone, Integer pageNum, Integer pageSize, Integer deptId, Integer state, Integer moduleType);

    /**
     * 获取未读消息数
     *
     * @param user
     * @param deptId
     * @return
     */
    AppMsgNumDTO getUnreadMsgNum(SysUser user, Integer deptId);
    /**
     * 获取未读消息数
     *
     * @param phone
     * @param deptId
     * @return
     */
    AppMsgNumDTO getUnreadMsgNum(String phone, Integer deptId);

    /**
     * 批量新增消息
     *
     * @param messageList
     */
    void addMessage(List<AppMessage> messageList);

    /**
     * 添加报警消息
     *
     * @param moduleType     模块
     * @param userList       消息接收人
     * @param msgChannelList 消息推送渠道
     * @param title          标题
     * @param content        内容
     * @param msgObjectId    消息关联业务对象
     * @param deptId         项目ID
     * @param time           时间
     */
    void addWarnMessage(Integer moduleType, List<AppMsgToUserDTO> userList, List<Integer> msgChannelList, String title, String content, String msgObjectId, Integer deptId, Date time);

    /**
     * 删除消息
     *
     * @param idList
     */
    void del(List<Integer> idList);

    /**
     * 删除所有消息
     *
     * @param phone
     * @param deptId
     * @param moduleType
     * @param state
     */
    void delAll(String phone, Integer deptId, Integer moduleType, Integer state);

    /**
     * 将消息设置为已读
     *
     * @param idList
     */
    void read(List<Integer> idList);

    /**
     * 标记读取所有消息
     *
     * @param phone
     * @param deptId
     * @param moduleType
     */
    void readAll(String phone, Integer deptId, Integer moduleType);

    /**
     * 更新短信状态(state=3)
     *
     * @param id
     */
    void updateSmsState(Integer id);

    /**
     * 查询报警消息概况
     *
     * @param deptId
     * @param phone
     * @return
     */
    ListData<AppWarnMsgDTO> getWarnGeneral(Integer deptId, String phone);

    /**
     * 获取报警消息列表
     *
     * @param deptId
     * @param phone
     * @param handleState
     * @param moduleType
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<AppWarnMsgDTO> getWarnMsgList(Integer deptId, String phone, Integer handleState, Integer moduleType, Integer pageNum, Integer pageSize);

    /**
     * 消息类型数据统计
     *
     * @param deptId
     * @param warnType
     * @param userId
     * @return
     */
    List<MsgStatisticsDTO> getWarnMsgStatistics(Integer deptId, Integer warnType, Integer userId);

    /**
     * 报警消息分页
     *
     * @param param
     * @return
     */
    PageVO<MsgRecordDTO> getWarnMsgPage(WarnMsgSearchParam param);

    void addAppMessage(List<AppMessage>  appMessage);

    List<AppMessage> searchAllByMsgObjectId(String msgObjectId);
}
